/**
 * 视频工具函数
 */

/**
 * 通过创建Blob URL来解决跨域视频播放问题
 * @param {string} videoUrl 原始视频URL
 * @returns {Promise<string>} 返回可以播放的Blob URL
 */
export const createBlobUrlFromVideo = async videoUrl => {
  try {
    // 如果URL是本地URL或已经是Blob URL，直接返回
    if (!videoUrl || videoUrl.startsWith("blob:") || videoUrl.startsWith("/")) {
      return videoUrl;
    }

    // 通过fetch获取视频内容
    const response = await fetch(
      `/video-proxy?url=${encodeURIComponent(videoUrl)}`,
      {
        method: "GET",
        mode: "cors",
        cache: "no-cache",
        headers: {
          Accept: "video/mp4,video/*;q=0.9,*/*;q=0.8"
        }
      }
    );

    if (!response.ok) {
      throw new Error(
        `视频加载失败: ${response.status} ${response.statusText}`
      );
    }

    // 获取视频blob
    const videoBlob = await response.blob();

    // 创建Blob URL
    const blobUrl = URL.createObjectURL(videoBlob);
    return blobUrl;
  } catch (error) {
    console.error("创建视频Blob URL失败:", error);
    // 出错时返回原始URL，让浏览器尝试直接加载
    return videoUrl;
  }
};

/**
 * 销毁Blob URL，释放内存
 * @param {string} blobUrl Blob URL
 */
export const revokeBlobUrl = blobUrl => {
  if (blobUrl && blobUrl.startsWith("blob:")) {
    URL.revokeObjectURL(blobUrl);
  }
};

/**
 * 播放视频函数
 * @param {HTMLVideoElement} videoElement 视频元素
 * @param {string} videoUrl 视频URL
 */
export const playVideo = async (videoElement, videoUrl) => {
  if (!videoElement || !videoUrl) return;

  try {
    // 先暂停当前视频
    videoElement.pause();

    // 处理视频URL
    const blobUrl = await createBlobUrlFromVideo(videoUrl);

    // 设置视频源
    videoElement.src = blobUrl;

    // 加载并播放视频
    videoElement.load();

    // 视频加载完成后播放
    videoElement.onloadeddata = () => {
      videoElement.play().catch(err => {
        console.error("视频播放失败:", err);
      });
    };

    // 监听错误
    videoElement.onerror = e => {
      console.error("视频播放错误:", e);
    };
  } catch (error) {
    console.error("视频播放处理失败:", error);
  }
};
